// 存储用户动态数据文件
import { setToken, getToken } from '@/utils/auth' // 引入登录后的本地存储数据setToken
import { login, getProfile, getUserDetailById } from '@/api/user'
export default {
  namespaced: true,
  state: {
    token: getToken() || '',
    userInfo: {}
  },
  // 提交mutation改变state中的数据
  mutations: {
    // 调用数据请求函数(set)(state,参数){}
    setToken(state, newToken) {
      // 将登陆成功后从本地存储发送的token保存到vuex数据中
      state.token = newToken
      // 持久化更新数据，便于检测到数据发生改变或者token过期(数据改变后或数据过期为空时提交到state数据中)
      setToken(newToken)
    },
    // 设置用户信息
    setUserInfo(state, newInfo) {
      // console.log(newInfo) // 打印出一个用户信息对象
      state.userInfo = newInfo
    }
    // 删除用户信息
    // reomveUserInfo(state) {
    //   state.userInfo = {}
    // }
  },
  // actions用来处理mutations中的异步操作，触发mutations中的函数
  actions: {
    // 用户登录时触发异步行为，名字(context，参数){}
    // vuex中actions中函数默认自带参数context，context的话就相当于state的父亲，上一级，包含着state中的所有属性
    async userLogin(context, data) {
      // login(data)
      // 发送用户信息
      const res = await login(data)
      // 传输参数是用户名密码
      console.log(res) // 打印结果是一个登录成功对象
      // console.log('token', res.data) // 打印token令牌
      // 调用mutation中的setToken提交保存token，且触发mutation执行
      context.commit('setToken', res.data)
    }, // 再传输到api/user中的请求函数，然后传回来的数据保存至上面的state和mutations中调用

    // 路由跳转时，获取用户信息
    async getUserInfo(context) {
      // console.log('action getProfile')
      // ajax获取数据
      const res = await getProfile()
      // 获取用户信息的id
      // console.log('获取用户信息的', res) // 同上21行打印结果
      // 发送异步请求id，获取信息用res2变量接收
      // 将获取的res.data.userId传入getUserDetailById请求中获取身份权限
      const res2 = await getUserDetailById(res.data.userId)
      // console.log('res', res.data)
      // console.log('res2', res2.data) 能获取用户身份id
      // 保存到state
      context.commit('setUserInfo', { ...res.data, ...res2.data })
    },
    // 点击退出登录 更新数据为空
    userLogout(context) {
      context.commit('setToken', '')
      context.commit('setUserInfo', {})
    }
  }
}
